package com.common.dingding.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.common.dingding.entity.SchedulingRecord;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * 排班记录Service
 */
public interface SchedulingRecordService extends IService<SchedulingRecord> {
    
    /**
     * 保存排班记录
     * @param record 排班记录
     * @return 是否成功
     */
    boolean saveScheduling(SchedulingRecord record);
    
    /**
     * 批量保存排班记录
     * @param records 排班记录列表
     * @return 是否成功
     */
    boolean saveBatchScheduling(List<SchedulingRecord> records);
    
    /**
     * 删除排班记录
     * @param userId 用户ID
     * @param scheduleDate 排班日期
     * @param deleteBy 删除人
     * @return 是否成功
     */
    boolean deleteScheduling(String userId, LocalDate scheduleDate, String deleteBy);
    
    /**
     * 查询某天的排班记录
     * @param scheduleDate 排班日期
     * @param userIds 用户ID列表
     * @return 排班记录列表
     */
    List<SchedulingRecord> getSchedulingByDate(LocalDate scheduleDate, List<String> userIds);
    
    /**
     * 查询某月每天的排班人数
     * @param year 年份
     * @param month 月份
     * @param userIds 用户ID列表
     * @return 每天的排班人数，key为日期，value为人数
     */
    Map<String, Integer> getDailyCountByMonth(int year, int month, List<String> userIds);
    
    /**
     * 查询用户的下一次排班日期
     * @param userId 用户ID
     * @return 下一次排班日期
     */
    LocalDate getNextScheduleDate(String userId);
    
    /**
     * 查询用户在某天是否排班
     * @param userId 用户ID
     * @param scheduleDate 排班日期
     * @return 是否排班
     */
    boolean isScheduled(String userId, LocalDate scheduleDate);
}